
package com.kevin.enums.transaction;

import java.sql.Connection;


public enum TransactionIsolationLevel {
  NONE(Connection.TRANSACTION_NONE),
  //就是俗称“脏读”（dirty read），在没有提交数据时能够读到已经更新的数据
  //说明在提交前一个事务可以看到另一个事务的变化。这样脏读、不可重复的读和虚读都是允许的。
  READ_UNCOMMITTED(Connection.TRANSACTION_READ_UNCOMMITTED),
  //在一个事务中进行查询时，允许读取提交前的数据，数据提交后，当前查询就可以读取到数据。update数据时候并不锁住表
  //说明读取未提交的数据是不允许的。这个级别仍然允许不可重复的读和虚读产生。
  READ_COMMITTED(Connection.TRANSACTION_READ_COMMITTED),
  //在一个事务中进行查询时，不允许读取其他事务update的数据，允许读取到其他事务提交的新增数据
  //说明事务保证能够再次读取相同的数据而不会失败，但虚读仍然会出现。
  REPEATABLE_READ(Connection.TRANSACTION_REPEATABLE_READ),
  //在一个事务中进行查询时，不允许任何对这个查询表的数据修改。
  //是最高的事务级别，它防止脏读、不可重复的读和虚读。
  SERIALIZABLE(Connection.TRANSACTION_SERIALIZABLE);

  private final int level;

  private TransactionIsolationLevel(int level) {
    this.level = level;
  }

  public int getLevel() {
    return level;
  }
}
